/* 
 * AUTHOR: Kevin Lam
 */

package com.apps.ubc.cc.ajax;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringEscapeUtils;

import com.apps.datastore.UBCCourseSpiderDatastore;
import com.apps.datastore.dao.CourseInformationObject;
import com.apps.datastore.dao.DepartmentInformationObject;
import com.apps.datastore.dao.SectionInformationObject;

public class SearchResultsController extends HttpServlet {
	
	private UBCCourseSpiderDatastore d = new UBCCourseSpiderDatastore();
	
	public void doGet(HttpServletRequest req, HttpServletResponse resp) {
		String dept = req.getParameter("dept");
		String course = req.getParameter("course");
		String section = req.getParameter("section");
		String xmlout = "<searchresults>\n";
		
		if (dept != null && course != null && section != null && !dept.isEmpty()&& !course.isEmpty()&& !section.isEmpty()) {
			SectionInformationObject sio = d.querySectionFromId(dept.toUpperCase(),
					course.toUpperCase(), section.toUpperCase());
			if (sio != null) {
				xmlout += "<type>section</type>\n";
				xmlout += "\t<item>\n";
				xmlout += "\t\t<dept>"+StringEscapeUtils.escapeXml(sio.getDepartmentId())+"</dept>\n";
				xmlout += "\t\t<course>"+StringEscapeUtils.escapeXml(sio.getCourseId())+"</course>\n";
				xmlout += "\t\t<section>"+StringEscapeUtils.escapeXml(sio.getSectionId())+"</section>\n";
				xmlout += "\t</item>\n";
			}
			else {
				xmlout += "<type>none</type>\n";
			}
		} else if (dept !=null && course != null && !dept.isEmpty()&& !course.isEmpty()) {
			CourseInformationObject cio = d.queryCourseFromId(dept.toUpperCase(), course.toUpperCase());
			if (cio != null) {
				xmlout += "<type>course</type>\n";
				List<SectionInformationObject> siol = d.getSectionList(cio);
				for(Iterator<SectionInformationObject> i = siol.iterator(); i.hasNext();)
					xmlout += formatXml(i.next());
			}
			else {
				xmlout += "<type>none</type>\n";
			}
		} else if (dept != null && !dept.isEmpty()) {
			DepartmentInformationObject dio = d.queryDepartmentFromId(dept.toUpperCase());
			if (dio != null){
				xmlout += "<type>department</type>\n";
				List<CourseInformationObject> ciol = d.getCourseList(dio);
				for(Iterator<CourseInformationObject> i = ciol.iterator(); i.hasNext();)
					xmlout += formatXml(i.next());
			}
			else {
				xmlout += "<type>none</type>\n";
			}
		}
		else {
			xmlout += "<type>none</type>\n";
		}
		xmlout += "</searchresults>";
		try {
			resp.setContentType("text/xml");
			resp.getWriter().write(xmlout);
		} catch (IOException e) {
			e.printStackTrace();
		}
	
	}
	
	private String formatXml(SectionInformationObject sio){
		String xml = "\t<item>\n";
		xml += "\t\t<dept>"+StringEscapeUtils.escapeXml(sio.getDepartmentId())+"</dept>\n";
		xml += "\t\t<course>"+StringEscapeUtils.escapeXml(sio.getCourseId())+"</course>\n";
		xml += "\t\t<section>"+StringEscapeUtils.escapeXml(sio.getSectionId())+"</section>\n";
		xml += "\t\t<activity>"+StringEscapeUtils.escapeXml(sio.getActivity())+"</activity>\n";
		xml += "\t\t<term>"+StringEscapeUtils.escapeXml(sio.getTerm())+"</term>\n";
		xml += "\t\t<day>"+StringEscapeUtils.escapeXml(sio.getDay())+"</day>\n";
		if(!sio.getStart().isEmpty() && !sio.getEnd().isEmpty() )
			xml += "\t\t<time>"+StringEscapeUtils.escapeXml(sio.getStart())+" - "+StringEscapeUtils.escapeXml(sio.getEnd())+"</time>\n";
		else
			xml += "\t\t<time>Not available</time>\n";
		if(!sio.getInstructor().isEmpty())
			xml += "\t\t<instructor>"+StringEscapeUtils.escapeXml(sio.getInstructor())+"</instructor>\n";
		else
			xml += "\t\t<instructor>Not available</instructor>\n";
		xml += "\t</item>\n";
		return xml;
	}
	
	private String formatXml(CourseInformationObject cio){
		String xml = "\t<item>\n";
		xml += "\t\t<dept>"+StringEscapeUtils.escapeXml(cio.getDepartmentId())+"</dept>\n";
		xml += "\t\t<course>"+StringEscapeUtils.escapeXml(cio.getCourseId())+"</course>\n";
		xml += "\t\t<title>"+StringEscapeUtils.escapeXml(cio.getCourseTitle())+"</title>\n";
		xml += "\t\t<credits>"+StringEscapeUtils.escapeXml(""+cio.getCredits())+"</credits>\n";
		xml += "\t\t<prereq>"+StringEscapeUtils.escapeXml(cio.getPrereqString())+"</prereq>\n";
		xml += "\t\t<coreq>"+StringEscapeUtils.escapeXml(cio.getCoreqString())+"</coreq>\n";
		xml += "\t</item>\n";
		return xml;
	}
}
